home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 095 / rbbssrc1.arc / CNFG-SUB.BAS < prev    next >
Encoding:
BASIC Source File  |  1987-03-15  |  62.9 KB  |  1,513 lines

  1. ' $linesize:132
  2. ' $title: 'CNFG-SUB.BAS CPC15-1A, Copyright 1987 by D. Thomas Mack'
  3. '  Copyright 1987 by D. Thomas Mack, all rights reserved.
  4. '  Name ...............: CNFG-SUB.BAS
  5. '  Written by .........: D. Thomas Mack
  6. '  First Released .....: March 15, 1987
  7. '  Subsequent Releases.: None
  8. '  Copyright ..........: 1987
  9. '  Purpose.............: The Remote Bulletin Board System for the IBM PC,
  10. '                        RBBS-PC, configuration program -- CONFIG.BAS
  11. '                        utilizes a lot of menus and string space.
  12. '                        These are incorporated within CNFG-SUB.BAS as a
  13. '                        seperately callable subroutines in order to free
  14. '                        up as much code as possible within the 64K code
  15. '                        segment used by CONFIG.BAS.
  16. '  Parameters..........: Most parameters are passed via a COMMON statement.
  17. '
  18. ' Subroutine  Line      Function of Subroutine
  19. '    Name    Number
  20. ' ALLCAPS    61212+     Captialize a string
  21. ' ANYINTEGER 61450      Prompt for any integer
  22. ' ANYNUMBER  61400      Prompt for any number
  23. ' ASKRO      61000      Ask a question on a specific row
  24. ' ASKUPS     61300      Ask for identifying field in USERS record
  25. ' CHKFMSDIR  61700      Check FMS directory for valid structure
  26. ' CNFGINIT   60385      Initialize CONFIG's constants
  27. ' DISPLAY    12190      Display the CONFIG menu pages
  28. ' FINDFILE   61600      Determine whether a file exists
  29. ' GETNUMYN   61150      Get TRUE/FALSE answer to a YES/NO question
  30. ' GETYESNO   61200      Ask a question with a "yes" or "no" response
  31. ' MMINTEGER  61500      Prompt for integer with min and a max
  32. ' REMOVE     61800      Remove characters from a string
  33. '
  34. '  $INCLUDE: 'CNFG-VAR.BAS'
  35. '
  36. '  $SUBTITLE: 'DISPLAY - subroutine to display CONFIG's menus'
  37. '  $PAGE
  38. '
  39. '  SUBROUTINE NAME    --  DISPLAY
  40. '
  41. '  INPUT PARAMETERS   --  PARAMETER        DESCRIPTION
  42. '                         IX = 0           DISPLAY THE CHOICE OF MENUS
  43. '                         IX = -1          RE-READ THE INPUT (INVALID REQUEST)
  44. '                         IX > 0           DISPLAY THE APPROPRIATE PAGE
  45. '
  46. '  OUTPUT PARAMETERS  --  HJ$              OPTION SELECTED
  47. '                         IPAGE            MENU PAGE CONTAINING OPTION
  48. '                         ILOOKUP          INDEX (1 TO 20) OF OPTION SELECTED
  49. '
  50. '  SUBROUTINE PURPOSE --  TO DISPLAY CONFIG'S MENUS AND REQUEST OPTION
  51. '
  52.       SUB DISPLAY STATIC
  53. '
  54. ' *****************************************************************************
  55. ' *  DISPLAY CONFIG'S MAIN FUNCTION KEY MENU                                  *
  56. ' *****************************************************************************
  57. '
  58.       IF IX > 0 THEN _
  59.          GOTO 12320
  60.       IF IX = -1 THEN _
  61.          GOTO 12590
  62. 12190 COLOR FG,BG,BORDER
  63.       CLS
  64.       DISPLAYED.PAGE.NUMBER = 0
  65.       I! = FRE(C$)
  66.       COLOR 0,7,0
  67.       LOCATE 4,10
  68.       PRINT "RBBS-PC CPC15.1 CONFIGURATION PROGRAM " + CONFIG.VERSION$
  69.       COLOR FG,BG,BORDER
  70.       LOCATE 1,1,0
  71.       PRINT "Copyright (c) 1983-1987 Tom Mack"
  72.       LOCATE 2,1,0
  73.       PRINT "10210 Oxfordshire Rd., Great Falls, VA 22066";
  74.       IF F THEN _
  75.          GOSUB 24970
  76.       LOCATE  5,2
  77.       PRINT "   F1            Global RBBS-PC Parameters (part 1)
  78.       LOCATE  6,2
  79.       PRINT "   F2            Global RBBS-PC Parameters (part 2)
  80.       LOCATE  7,2
  81.       PRINT "   F3            Global RBBS-PC Parameters (part 3)
  82.       LOCATE  8,2
  83.       PRINT "   F4            Parameters for static RBBS-PC Files
  84.       LOCATE  9,2
  85.       PRINT "   F5            Parameters for dynamic RBBS-PC's Files
  86.       LOCATE 10,2
  87.       PRINT "   F6            Parameters for RBBS-PC's 'Doors'
  88.       LOCATE 11,2
  89.       PRINT "   F7            Parameters for RBBS-PC's Security
  90.       LOCATE 12,2
  91.       PRINT "   F8            Parameters for multiple RBBS-PC's
  92.       LOCATE 13,2
  93.       PRINT "   F9            RBBS-PC utilities
  94.       LOCATE 14,2
  95.       PRINT "  F10            RBBS-PC File Management Faciliites"
  96.       LOCATE 15,2
  97.       PRINT "  Shift-F1       RBBS-PC Communications Parameters"
  98.       LOCATE 16,2
  99.       PRINT "  Shift-F2       Parameters for RBBS-PC NET-MAIL
  100.       LOCATE 17,2
  101.       PRINT "  Shift-F3       New users parameters"
  102.       LOCATE 18,2
  103.       PRINT "  Shift-F4       Reserved for future use"
  104.       LOCATE 19,2
  105.       PRINT "  Shift-F5       Reserved for future use"
  106.       LOCATE 20,2
  107.       PRINT "  Shift-F6       Reserved for future use"
  108.       LOCATE 21,2
  109.       PRINT "  Shift-F7       Reserved for future use"
  110.       LOCATE 22,2
  111.       PRINT "  Shift-F8       Reserved for future use"
  112.       XX$ = "Press END to terminate or Function Key to select page for parameters shown "
  113.       GOSUB 50345
  114.       LOCATE ,,1
  115. 12310 GOSUB 22160
  116. 12320 IF IX THEN _            'IX       Key    Where to branch to
  117.          ON IX GOTO 12360, _  ' 1        F1 - Global Parameters (Part 1)
  118.                     12370, _  ' 2        F2 - Global Parameters (Part 2)
  119.                     12380, _  ' 3        F3 - Global Parameters (Part 3)
  120.                     12390, _  ' 4        F4 - Static RBBS-PC Files
  121.                     12400, _  ' 5        F5 - Dynamic RBBS-PC Files
  122.                     12410, _  ' 6        F6 - RBBS-PC "doors"
  123.                     12420, _  ' 7        F7 - RBBS-PC security parameters
  124.                     12470, _  ' 8        F8 - Multiple RBBS-PC parameters
  125.                     12480, _  ' 9        F9 - RBBS-PC's utilities
  126.                     12490, _  '10       F10 - RBBS-PC File Manager
  127.                     12500, _  '11  Shift-F1 - RBBS-PC communications parameters
  128.                     12510, _  '12  Shift-F2 - RBBS-PC Net Mail
  129.                     12520, _  '13  Shift-F3 - New user parameters
  130.                     12310, _  '14  Shift-F4 - Reserved for future use
  131.                     12310, _  '15  Shift-F5 - Reserved for future use
  132.                     12310, _  '16  Shift-F6 - Reserved for future use
  133.                     12310, _  '17  Shift-F7 - Reserved for future use
  134.                     12310, _  '18  Shift-F8 - Reserved for future use
  135.                     12340, _  '19      PgUp - Go to previous page
  136.                     12330, _  '20      PgDn - Go to next page
  137.                     12630, _  '21       End - Terminate CONFIG
  138.                     12350     '22     Enter - Re-display current page
  139.       GOTO 12310
  140. '
  141. ' *****************************************************************************
  142. ' *  COMMON ROUTINE TO HANDLE UNDEFINED OPTIONS                               *
  143. ' *****************************************************************************
  144. '
  145. 12325 IX = IPAGE
  146.       GOTO 12320
  147. '
  148. ' *****************************************************************************
  149. ' *  COMMON ROUTINE TO HANDLE PAGE UP OF DISPLAYS                             *
  150. ' *****************************************************************************
  151. '
  152. 12330 IF (DISPLAYED.PAGE.NUMBER + 1 ) > 13 THEN _
  153.          GOTO 12190
  154.       IX = DISPLAYED.PAGE.NUMBER + 1
  155.       GOTO 12320
  156. '
  157. ' *****************************************************************************
  158. ' *  COMMON ROUTINE TO HANDLE PAGE DOWN OF DISPLAYS                           *
  159. ' *****************************************************************************
  160. '
  161. 12340 IF (DISPLAYED.PAGE.NUMBER - 1) < 1 THEN _
  162.          GOTO 12190
  163.       IX = DISPLAYED.PAGE.NUMBER - 1
  164.       GOTO 12320
  165. '
  166. ' *****************************************************************************
  167. ' *  RETURN TO PRIMARY MENU SELECTION DISPLAY                                 *
  168. ' *****************************************************************************
  169. '
  170. 12350 GOSUB 60380
  171.       GOTO 12310
  172. '
  173. ' *****************************************************************************
  174. ' *  COMMON CONFIGURATION PROGRAM MENU AND PAGE DISPLAY                       *
  175. ' *****************************************************************************
  176. '
  177. 12360 DISPLAYED.PAGE.NUMBER = 1
  178.       GOSUB 24800
  179.       LOCATE  3,10
  180.       PRINT " 1. SYSOP's First Name --------------------------- " + SYSOP.FIRST.NAME$
  181.       LOCATE  4,10
  182.       PRINT " 2. SYSOP's Last Name ---------------------------- " + SYSOP.LAST.NAME$
  183.       LOCATE  5,10
  184.       PRINT " 3. Password #1 for SYSOP to sign on remotely ---- " + MN1$
  185.       LOCATE  6,10
  186.       PRINT " 4. Password #2 for SYSOP to sign on remotely----- " + MN2$
  187.       LOCATE  7,10
  188.       PRINT " 5. Password for SYSOP to sign on locally -------- " + LOCAL.PASSWORD$
  189.       LOCATE  8,10
  190.       PRINT " 6. SYSOP's default sign-on mode ----------------- " + EXPERT.USER$
  191.       LOCATE  9,10
  192.       PRINT " 7. SYSOP's office hours -------------------------"STR$(START.OFFICE.HOURS);" to"STR$(END.OFFICE.HOURS)
  193.       LOCATE 10,10
  194.       PRINT " 8. Page SYSOP using printer's bell -------------- " + M11$
  195.       LOCATE 11,10
  196.       PRINT " 9. Deny access to callers who use 300 baud ------ " + RESTRICT.BAUD$
  197.       LOCATE 12,10
  198.       PRINT "10. Are you using ANSI.SYS with a color monitor -- " + USE.COLOR$
  199.       LOCATE 13,10
  200.       PRINT "11. Go off-line whenever a DISK FULL occurs ------ " + DISKFULL.GO.OFFLINE$
  201.       LOCATE 14,10
  202.       PRINT "12. Prompt bell default is ----------------------- " + PROMPT.BELL$
  203.       LOCATE 15,10
  204.       PRINT "13. Maximum time per session (in minutes) --------"STR$(MINUTES.PER.SESSION!)
  205.       LOCATE 16,10
  206.       PRINT "14. Limit each user to" + STR$(MINUTES.PER.SESSION!) + " minutes/day? " + STRING$((14-LEN(STR$(MINUTES.PER.SESSION!))),45) + " " + LIMIT.DAILY.TIME$
  207.       LOCATE 17,10
  208.       PRINT "15. # Months of inactivity before user deleted ---"STR$(ACT.MNTHS.B4.DELETING)
  209.       LOCATE 18,10
  210.       PRINT "16. Name of RBBS-PC shown initially is ----------- " + RBBS.NAME$
  211.       LOCATE 19,10
  212.       PRINT "17. Foreground color (for color monitors) is -----"STR$(FG)
  213.       LOCATE 20,10
  214.       PRINT "18. Background color (for color monitors) is -----"STR$(BG)
  215.       LOCATE 21,10
  216.       PRINT "19. The border color (for color monitors) is -----"STR$(BORDER)
  217.       LOCATE 22,10
  218.       PRINT "20. Users that can elect to bypass messages ------ " + NOT.YET.IN$ ' SL.TO.BYPASS.MSGS
  219.       GOTO 12580
  220. 12370 DISPLAYED.PAGE.NUMBER = 2
  221.       GOSUB 24800
  222.       LOCATE  3,10
  223.       PRINT "21. Remind users of messages that they left ------ " + MESSAGE.REMINDER$
  224.       LOCATE  4,10
  225.       PRINT "22. Remind users of # uploads and downloads? ----- " + REMIND.FILE.TRANSFERS$
  226.       LOCATE  5,10
  227.       PRINT "23. Remind users of their terminal profile? ------ " + REMIND.PROFILE$
  228.       LOCATE  6,10
  229.       PRINT "24. Default user page length is ------------------" + STR$(PAGE.LENGTH)
  230.       LOCATE  7,10
  231.       PRINT "25. Maximum number of lines allowed per message --" + STR$(MAX.MESSAGE.LINES)
  232.       LOCATE  8,10
  233.       PRINT "26. Require non-ascii protocol for BASIC files --- " + REQUIRE.NON.ASCII$
  234.       LOCATE  9,10
  235.       PRINT "27. Factor to extend session time for uploads ----" + STR$(UPLOAD.TIME.FACTOR!)
  236.       LOCATE 10,10
  237.       PRINT "28. Name of required questionnaire --------------- " + REQUIRED.QUESTIONNAIRE$
  238.       LOCATE 11,10
  239.       PRINT "29. Is system 'welcome' interruptable? ----------- " + WELCOME.INTERRUPTABLE$
  240.       LOCATE 12,10
  241.       PRINT "30. Are system bulletins to be 'optional'? ------- " + BULLETINS.OPTIONAL$
  242.       LOCATE 13,10
  243.       PRINT "31. Type of PC RBBS-PC will be running on? ------- " + COMPUTER.TYPE$
  244.       LOCATE 14,10
  245.       PRINT "32. Symbols to use for SYSOP commands ------------ " + SYSOP.COMMANDS$
  246.       LOCATE 15,10
  247.       PRINT "33. Symbols to use for MAIN menu commands -------- " + MAIN.COMMANDS$
  248.       LOCATE 16,10
  249.       PRINT "34. Symbols to use for FILE menu commands -------- " + FILE.COMMANDS$
  250.       LOCATE 17,10
  251.       PRINT "35. Symbols to use for UTILITIES menu commands --- " + UTIL.COMMANDS$
  252.       LOCATE 18,10
  253.       PRINT "36. Symbols to use for global commands ----------- " + GLOBAL.COMMANDS$
  254.       LOCATE 19,10
  255.       PRINT "37. Show section in command prompt --------------- " + SHOW.SECTION$
  256.       LOCATE 20,10
  257.       PRINT "38. Show commands in command prompt -------------- " + COMMANDS.IN.PROMPT$
  258.       LOCATE 21,10
  259.       PRINT "39. Use machine language routines for speed ------ " + TURBO.RBBS$
  260.       LOCATE 22,10
  261.       PRINT "40. Restrict valid commands to current section --- " + FNYESNO$(RESTRICT.VALID.CMDS) 'CNFG151A7
  262.       GOTO 12580
  263. 12380 DISPLAYED.PAGE.NUMBER = 3
  264.       GOSUB 24800
  265.       LOCATE  3,10
  266.       PRINT "41. Field used to identify users ----------------- " + HASH.ID$
  267.       LOCATE  4,10
  268.       PRINT "42. Field used to distinguish users with same ID-- " + INDIV.ID$
  269.       LOCATE  5, 10
  270.       PRINT "43. RESTRICT users by SUBSCRIPTION date ---------- " + RESTRICT.BY.DATE$
  271.       LOCATE  6,10
  272.       PRINT "44. Security level when SUBSCRIPTION expires -----"  + STR$(EXPIRED.SECURITY)
  273.       LOCATE  7,10
  274.       PRINT "45. Days before expiration to warn callers -------"  + STR$(DAYS.TO.WARN)
  275.       LOCATE  8,10
  276.       PRINT "46. Default # days in SUBSCRIPTION PERIOD --------"  + STR$(DAYS.IN.SUBSCRIPTION.PERIOD)
  277.       LOCATE  9,10
  278.       PRINT "47. Turn printer off after each recycle ---------- " + TURN.PRINTER.OFF$
  279.       LOCATE 10,10
  280.       PRINT "48. Play musical themes for RBBS functions ------- " + MUSIC$
  281.       LOCATE 11,10
  282.       PRINT "49. BUFFER SIZE used when displaying text files --" + STR$(BUFFER.SIZE)
  283.       LOCATE 12,10
  284.       PRINT "50. File shown users when SYSOP wants system next  " + NOT.YET.IN$ ' F7.MESSAGE$
  285.       LOCATE 13,10
  286.       PRINT "51. Call-back verification ----------------------- " + NOT.YET.IN$ ' CALLBACK.VERIFICATION$
  287.       LOCATE 14,10
  288.       PRINT "52. On a unrecoverable error --------------------- " + NOT.YET.IN$ ' HALT.ON.ERROR$
  289.       GOTO 12580
  290. 12390 DISPLAYED.PAGE.NUMBER = 4
  291.       GOSUB 24800
  292.       IF INSTR(DRIVE.FOR.BULLETINS$,":") < 1 THEN _
  293.          DRIVE.FOR.BULLETINS$ = DRIVE.FOR.BULLETINS$ + ":"
  294.       LOCATE  3,10
  295.       PRINT "61. Drive and file describing 'bulletins' is ----- " + DRIVE.FOR.BULLETINS$ + BULLETIN.MENU$
  296.       LOCATE  4,10
  297.       PRINT "62. Number of active 'bulletins' -----------------" + STR$(ACTIVE.BULLETINS)
  298.       LOCATE  5,10
  299.       PRINT "63. Prefix used to name bulletin files is -------- " + BULLETIN.PREFIX$
  300.       LOCATE  6,10
  301.       PRINT "64. Drive and path (optional) for 'help' files --- " + HELP.PATH$
  302.       LOCATE  7,10
  303.       PRINT "65. Prefix used to name four major 'help' files -- " + HELP.FILE.PREFIX$
  304.       LOCATE  8,10
  305.       PRINT "66. Extension for help files of individual cmds -- " + HELP.EXTENSION$
  306.       LOCATE  9,10
  307.       PRINT "67. HELP file when callers CATEGORIZE uploads ---- " + UPCAT.HELP$
  308.       LOCATE 10,10
  309.       PRINT "68. Name of 'newuser' file shown to new users ---- " + NEWUSER.FILE$
  310.       LOCATE 11,10
  311.       PRINT "69. Name of 'welcome' file shown at logon -------- " + WELCOME.FILE$
  312.       LOCATE 12,10
  313.       PRINT "70. The SYSOP's command menu is named ------------ " + MENU$(1)
  314.       LOCATE 13,10
  315.       PRINT "71. The MAIN system menu is named ---------------- " + MENU$(2)
  316.       LOCATE 14,10
  317.       PRINT "72. The file subsystem menu is named ------------- " + MENU$(3)
  318.       LOCATE 15,10
  319.       PRINT "73. The utilities subsystem menu is named -------- " + MENU$(4)
  320.       LOCATE 16,10
  321.       PRINT "74. Menu that lists available conferences is ----- " + CONFERENCE.MENU$
  322.       LOCATE 17,10
  323.       PRINT "75. Menu that lists questionnaires available is -- " + ANS.MENU$
  324.       LOCATE 18,10
  325.       PRINT "76. File containing invalid user names ----------- " + TRASHCAN.FILE$
  326.       GOTO 12580
  327. 12400 DISPLAYED.PAGE.NUMBER = 5
  328.       GOSUB 24800
  329.       LOCATE  3,10
  330.       PRINT "81. System file containing messages is named ----- " + MAIN.MESSAGE.FILE$
  331.       LOCATE  4,10
  332.       PRINT "82. System file for recording users is named ----- " + MAIN.USER.FILE$
  333.       LOCATE  5,10
  334.       PRINT "83. System file for comments to SYSOP is named --- " + COMMENTS.FILE$
  335.       LOCATE  6,10
  336.       PRINT "84. Record comments as private messages ---------- " + COMMENTS.AS.MESSAGES$
  337.       LOCATE  7,10
  338.       PRINT "85. System file for 'callers' is named ----------- " + CALLERS.FILE$
  339.       LOCATE  8,10
  340.       PRINT "86. Extended logging to 'callers' file ----------- " + EXTENDED.LOGGING$
  341.       LOCATE  9,10
  342.       PRINT "87. Wrap-around the 'callers' file --------------- " + NOT.YET.IN$ ' WRAP.CALLERS.FILE$
  343.       GOTO 12580
  344. 12410 DISPLAYED.PAGE.NUMBER = 6
  345.       GOSUB 24800
  346.       LOCATE  3,9
  347.       PRINT "101. Is the 'door' subystem available? ------------ " + DOORS.AVAILABLE$
  348.       LOCATE  4,9
  349.       PRINT "102. The 'door' subsystem menu is named ----------- " + MENU$(5)
  350.       LOCATE  5,9
  351.       PRINT "103. File RBBS builds dynamically to open a 'door'- " + RCTTY.BAT$
  352.       LOCATE  6,9
  353.       PRINT "104. When a 'door' closes, file to re-invoke RBBS - " + RBBS.BAT$
  354.       LOCATE  7,9
  355.       PRINT "105. Drive to look for COMMAND.COM on ------------- " + DISK.FOR.DOS$
  356.       LOCATE  8,9
  357.       PRINT "106. Use the Dos 'CTTY' command to redirect I/O --- " + REDIRECT.IO.METHOD$
  358.       LOCATE  9,9
  359.       PRINT "107. Invoke RBBS 'drivers' via ... ---------------- " + GO.TO.SHELL$
  360.       GOTO 12580
  361. 12420 DISPLAYED.PAGE.NUMBER = 7
  362.       GOSUB 24800
  363.       LOCATE  3,9
  364.       PRINT "121. Minimum security level to get onto RBBS -------" + STR$(MINIMUM.LOGON.SECURITY)
  365.       LOCATE  4,9
  366.       PRINT "122. Default security level for new callers --------" + STR$(DEFAULT.SECURITY.LEVEL)
  367.       LOCATE  5,9
  368.       PRINT "123. Security level for SYSOP ----------------------" + STR$(SYSOP.SECURITY.LEVEL)
  369.       LOCATE  6,9
  370.       PRINT "124. Files with download security are listed in ---- " + FILESEC.FILE$
  371.       LOCATE  7,9
  372.       PRINT "125. Minimum security level to see SYSOP's menu ----" + STR$(SYSOP.MENU.SECURITY.LEVEL)
  373.       LOCATE  8,9
  374.       PRINT "126. Minimum security level to use RBBS-PC 'doors'--" + STR$(DOORS.SECURITY.LEVEL)
  375.       LOCATE  9,9
  376.       PRINT "127. Max # security violations before disconnect ---" + STR$(MAXIMUM.VIOLATIONS)
  377.       M22$ = STR$(SF)
  378.       IX = SYSOP.FUNCTION(1)
  379.       FOR I = 2 TO NUM.SYSOP
  380.         IF IX <> SYSOP.FUNCTION(I) THEN _
  381.            M22$ = "(Variable)" : _
  382.            GOTO 12430 ELSE _
  383.       NEXT
  384. 12430 LOCATE 10,9
  385.       PRINT "128. Security level for SYSOP functions ------------" + M22$
  386.       M23$ = STR$(MM)
  387.       IX = MAIN.FUNCTION(1)
  388.       FOR I = 2 TO NUM.MAIN
  389.         IF IX<>MAIN.FUNCTION(I) THEN _
  390.            M23$ = "(Variable)" : _
  391.            GOTO 12440 ELSE _
  392.       NEXT
  393. 12440 LOCATE 11,9
  394.       PRINT "129. Security level for main menu functions --------" + M23$
  395.       M24$ = STR$(FC)
  396.       IX = FILES.FUNCTION(1)
  397.       FOR I = 2 TO NUM.FILES
  398.         IF IX<>FILES.FUNCTION(I) THEN _
  399.            M24$ = "(Variable)" : _
  400.            GOTO 12450 ELSE _
  401.       NEXT
  402. 12450 LOCATE 12,9
  403.       PRINT "130. Security level for file menu functions --------" + M24$
  404.       M25$ = STR$(UE)
  405.       IX = UTILITY.FUNCTION(1)
  406.       FOR I = 2 TO NUM.UTILITY
  407.         IF IX<>UTILITY.FUNCTION(I) THEN _
  408.            M25$ = "(Variable)" : _
  409.            GOTO 12460 ELSE _
  410.       NEXT
  411. 12460 LOCATE 13,9
  412.       PRINT "131. Security level for utilities menu functions ---" + M25$
  413.       M26$ = STR$(GB)
  414.       IX = GLOBAL.FUNCTION(1)
  415.       FOR I = 1 TO NUM.GLOBAL
  416.         IF IX<>GLOBAL.FUNCTION(I) THEN _
  417.            M26$ = "(Variable)" : _
  418.            GOTO 12465 ELSE _
  419.       NEXT
  420. 12465 LOCATE 14,9
  421.       PRINT "132. Security level for GLOBAL commands ------------" + M26$
  422.       LOCATE 15,9
  423.       PRINT "133. File with privileged group passwords is named-- "+ PASSWORD.FILE$
  424.       LOCATE 16,9
  425.       PRINT "134. Max # of password changes in a session --------" + STR$(MAXIMUM.PASSWORD.CHANGES)
  426.       LOCATE 17,9
  427.       PRINT "135. Min. security level for temp. password changes-" + STR$(MINIMUM.SECURITY.FOR.TEMP.PASSWORD)
  428.       LOCATE 18,9
  429.       PRINT "136. Min. security level to overwrite on uploads ---" + STR$(OVERWRITE.SECURITY.LEVEL)
  430.       LOCATE 19,9
  431.       PRINT "137. User's security exempted from 'packing' -------" + STR$(SEC.LVL.EXEMPT.FRM.PURGING)
  432.       LOCATE 20,9
  433.       PRINT "138. Security level assigned new public messages --- " + NOT.YET.IN$ ' STR$(NEW.PUBLIC.MSGS.SECURITY)
  434.       LOCATE 21,9
  435.       PRINT "139. Security level assigned new private messages -- " + NOT.YET.IN$ ' STR$(NEW.PRIVATE.MSGS.SECURITY)
  436.       LOCATE 22,9
  437.       PRINT "140. Security able to revise a message's security -- " + NOT.YET.IN$ ' STR$(SECURITY.NEEDED.TO.CHANGE.MSGS)
  438.       GOTO 12580
  439. 12470 DISPLAYED.PAGE.NUMBER = 8
  440.       GOSUB 30040
  441.       MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
  442.       MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD
  443.       MAX.ALLOWED.MSGS.FRM.DEF  = MAXIMUM.NUMBER.OF.MSGS
  444.       GOSUB 24800
  445.       LOCATE  3,9
  446.       PRINT "141. Maximum number of concurrent RBBS-PC's  -------" + STR$(MAXIMUM.NUMBER.OF.NODES)
  447.       IF MAXIMUM.NUMBER.OF.NODES = 1 THEN _
  448.          MT$ = "single RBBS-PC copy " ELSE _
  449.          MT$ = "concurrent RBBS-PC's" : _
  450.          GOSUB 21900 : _
  451.          IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 4 THEN _
  452.             GOTO 21810
  453.       LOCATE  4,9
  454.       PRINT "142. Environment running " + MT$ + " ------ " + NETWORK.TYPE$
  455.       LOCATE  5,9
  456.       PRINT "143. RBBS-PC 'recycle' method when users log off --- " + RECYCLE.TO.DOS$
  457.       FILE$ = MAIN.MESSAGE.FILE$
  458.       GOSUB 30180
  459.       MAX.MSG.FILE.SIZE.FRM.DEF! = UG
  460.       LOCATE  6,9
  461.       PRINT "144. Number of records in the " + MAIN.USER.FILE$ + " file " + STRING$(16-LEN(MAIN.USER.FILE$),"-");STR$(MAX.USR.FILE.SIZE.FRM.DEF)
  462.       LOCATE  7,9
  463.       PRINT "145. Number of records in " + MAIN.MESSAGE.FILE$ + " file " + STRING$(20-LEN(MAIN.MESSAGE.FILE$),"-");STR$(MAX.MSG.FILE.SIZE.FRM.DEF!)
  464.       LOCATE  8,9
  465.       PRINT "146. Maximum number of messages allowed ------------" + STR$(MAX.ALLOWED.MSGS.FRM.DEF)
  466.       LOCATE  9,9
  467.       PRINT "147. Conference File Maintenance.
  468.       GOTO 12580
  469. 12480 DISPLAYED.PAGE.NUMBER = 9
  470.       GOSUB 24800
  471.       RB = 0
  472.       LOCATE  3,9
  473.       PRINT "161. Pack " + MAIN.MESSAGE.FILE$ + " file.
  474.       LOCATE  4,9
  475.       PRINT "162. Rebuild " + MAIN.USER.FILE$ + " file.
  476.       LOCATE  5,9
  477.       PRINT "163. Print " + MAIN.MESSAGE.FILE$ + " 'header' records.
  478.       LOCATE  6,9
  479.       PRINT "164. Renumber messages in " + MAIN.MESSAGE.FILE$ + " file.
  480.       LOCATE  7,9
  481.       PRINT "165. Repair messages in " + MAIN.MESSAGE.FILE$ + " file.
  482.       LOCATE  8,9
  483.       PRINT "166. Make all users answer required questionnaire."
  484.       LOCATE  9,9
  485.       PRINT "167. Check FMS directory structure."
  486.       GOTO 12580
  487. 12490 DISPLAYED.PAGE.NUMBER = 10
  488.       GOSUB 24800
  489.       LOCATE  3,9
  490.       PRINT "181. Drive available for Uploading ---------------- " + DRIVE.FOR.UPLOADS$
  491.       LOCATE  4,9
  492.       PRINT "182. Name of directory for uploading -------------- " + UPLOAD.DIRECTORY$
  493.       LOCATE  5,9
  494.       PRINT "183. Drive/path where Upload Directory stored ----- " + UPLOAD.PATH$
  495.       LOCATE  6,9
  496.       PRINT "184. Drive(s) available for Downloading ----------- " + DRIVES.FOR.DOWNLOADS$
  497.       LOCATE  7,9
  498.       PRINT "185. Will you be using DOS sub-directories? ------- " + WILL.SUBDIRS.B.USED$
  499.       LOCATE  8,9
  500.       PRINT "186. Write Uploads to a DOS sub-directory? -------- " + UPLOAD.TO.SUBDIR$
  501.       LOCATE  9,9
  502.       PRINT "187. Are downloads from DOS sub-directories? ------ " + DOWNLOAD.TO.SUBDIR$
  503.       LOCATE 10,9
  504.       PRINT "188. List, change, add, delete sub-directories."
  505.       LOCATE 11,9
  506.       PRINT "189. File directory ext. (name dir of directories)- " + DIRECTORY.EXTENTION$
  507.       LOCATE 12,9
  508.       PRINT "190. Omit directory of directories in N)ew command  " + OMIT.MAIN.DIRECTORY$
  509.       LOCATE 13,9
  510.       IF ALWAYS.STREW.TO$ = "" OR _
  511.          ALWAYS.STREW.TO$ = "NONE" THEN _
  512.          PRINT "191. Do not copy upload descriptions to another file." _
  513.       ELSE PRINT "191. Copy all upload descriptions to -------------- " + ALWAYS.STREW.TO$
  514.       LOCATE 14,9
  515.       A$ = FMS.DIRECTORY$
  516.       IF FMS.DIRECTORY$ = "" THEN _
  517.          A$ = "[FMS is not active]"
  518.       PRINT "192. Name of File Management System directory is -- " + A$
  519.       LOCATE 15,9
  520.       PRINT "193. Min SECURITY to CATEGORIZE uploads -----------" + STR$(SL.CATEGORIZE.UPLOADS)
  521.       LOCATE 16,9
  522.       PRINT "194. Limit file searches to FMS directory only ---- " + LIMIT.SEARCH.TO.FMS$
  523.       LOCATE 17,9
  524.       PRINT "195. Default category code for uploads ------------ " + DEFAULT.CATEGORY.CODE$
  525.       LOCATE 18,9
  526.       PRINT "196. File containing valid directory categories --- " + DIR.CATEGORY.FILE$
  527.       LOCATE 19,9
  528.       PRINT "197. Enable download of new files at logon -------- " + NEW.FILES.CHECK$
  529.       LOCATE 20,9
  530.       PRINT "198. Max length of description of uploaded file -- " + STR$(MAX.DESC.LEN)
  531.       LOCATE 21,9
  532.       PRINT "199. Min security level to view new uploads ------ " + STR$(MIN.SEC.TO.VIEW)
  533.       LOCATE 22,9
  534.       PRINT "200. Drive and path (optional) for directory files  " + DIRECTORY.PATH$
  535.       GOTO 12580
  536. 12500 DISPLAYED.PAGE.NUMBER = 11
  537.       GOSUB 24800
  538.       LOCATE 3,9
  539.       PRINT "201. Communications port to be used by RBBS-PC ---- " + COM.PORT$
  540.       LOCATE 4,9
  541.       PRINT "202. # of seconds to wait for modem to initialize -" + STR$(MODEM.INIT.WAIT.TIME)
  542.       LOCATE 5,9
  543.       PRINT "203. Seconds to wait before issuing modem commands-" + STR$(MODEM.COMMAND.DELAY.TIME)
  544.       LOCATE 6,9
  545.       PRINT "204. Number of rings to wait before answering -----" + STR$(REQUIRED.RINGS);
  546.       IF MID$(MODEM.INIT.COMMAND$,24,5) = "255  " THEN _
  547.          PRINT "RING BACK";
  548.       LOCATE 7,9
  549.       PRINT "205. Use the RBBS-PC default Hayes commands? ------ " + M14$
  550.       LOCATE 8,9
  551.       PRINT "206. Is MICROCOM's MNP protocol available? -------- " + MNP.SUPPORT$
  552.       LOCATE 9,9
  553.       PRINT "207. Issue modem commands between rings ----------- " + COMMANDS.BETWEEN.RINGS$
  554.       LOCATE 10,9
  555.       PRINT "208. Baud rate to initially open modem at --------- " + MODEM.INIT.BAUD$
  556.       LOCATE 11,9
  557.       PRINT "209. Seconds waited before logging off idle users -" + STR$(WAIT.BEFORE.DISCONNECT)
  558.       LOCATE 12,9
  559.       PRINT "210. Are you using a 'DUMB' auto-answer modem? ---- " + DUMB.MODEM$
  560.       LOCATE 13,9
  561.       PRINT "211. Initialize Hayes 2400 firmware for RBBS-PC."
  562.       LOCATE 14,9
  563.       PRINT "212. # seconds to wait after dropping DTR ---------"  + STR$(DTR.DROP.DELAY)
  564.       LOCATE 15,9
  565.       PRINT "213. Drive/path where EXTERNAL PROTOCOL pgms stored " + PROTOCOL.PATH$
  566.       LOCATE 16,9
  567.       PRINT "214. Use Xmodem in external protocol programs ----- " + FNYESNO$(USE.EXTERNAL.XMODEM)
  568.       LOCATE 17,9
  569.       PRINT "215. Always check caller for AUTODOWNLOAD support - " + FNYESNO$(ASK.IDENTITY)
  570.       LOCATE 18,9
  571.       IF MASTER.DIRECTORY.NAME$ = "" THEN _
  572.          PRINT "216. Limit search for 'ALL' to non-FMS directory -- <none>" _
  573.       ELSE PRINT "216. Limit search for 'ALL' to non-FMS directory -- " + MASTER.DIRECTORY.NAME$
  574.       LOCATE 19,9
  575.       PRINT "217. Is the modem a TDD (handles Baudot code)? ---- " + NOT.YET.IN$ ' BAUDOT$
  576.       GOTO 12580
  577. 12510 DISPLAYED.PAGE.NUMBER = 12
  578.       GOSUB 24800
  579.       LOCATE 3,9
  580.       TIME.TO.DROP.TO.DOS$ = "None"
  581.       IF TIME.TO.DROP.TO.DOS > -1 THEN _
  582.          TIME.TO.DROP.TO.DOS$ = STRING$(4-(LEN(STR$(TIME.TO.DROP.TO.DOS))-1),"0") + MID$(STR$(TIME.TO.DROP.TO.DOS),2)
  583. 12312 PRINT "221. Time of day to exit to DOS ------------------- " + TIME.TO.DROP.TO.DOS$
  584.       LOCATE 4,9
  585.       PRINT "222. Net mail to invoke is ------------------------ " + NOT.YET.IN$ ' NET.MAIL$
  586.       GOTO 12580
  587. 12520 DISPLAYED.PAGE.NUMBER = 13
  588.       GOSUB 24800
  589.       LOCATE  3,9
  590.       PRINT "241. Let new users set their preferences --------- " + NEWUSER.SETS.DEFAULTS$
  591.       LOCATE  4,9
  592.       PRINT "242. New users default sign-on mode -------------- " + NOT.YET.IN$ ' NEW.USER.DEFAULT.MODE$
  593.       LOCATE  5,9
  594.       PRINT "243. New users default file-transfer protocol ---- " + NOT.YET.IN$ ' NEW.USER.DEFAULT.PROTOCOL$
  595.       LOCATE  6,9
  596.       PRINT "244. Line feeds for new users default to --------- " + NOT.YET.IN$ ' NEW.USER.LINE.FEEDS$
  597.       LOCATE  7,9
  598.       PRINT "245. Nulls for new users default to -------------- " + NOT.YET.IN$ ' NEW.USER.NULLS$
  599.       LOCATE  8,9
  600.       PRINT "246. Prompt bell for new users defaults to ------- " + NOT.YET.IN$ ' NEW.USER.BELL$
  601.       LOCATE  9,9
  602.       PRINT "247. New users 'graphics' capability is assumed -- " + NOT.YET.IN$ ' NEW.USER.GRAPHICS$
  603.       LOCATE 10,9
  604.       PRINT "248. New users are assumed UPPERCASE only -------- " + NOT.YET.IN$ ' NEW.USER.CASE$
  605.       LOCATE 11,9
  606.       PRINT "249. New users message margins defaults to ------- " + NOT.YET.IN$ ' STR$(NEW.USER.MARGINS)
  607.       LOCATE 12,9
  608.       PRINT "250. Add new users to USERS file ----------------- " + REMEMBER.NEW.USERS$
  609.       LOCATE 13,9
  610.       PRINT "251. Let new users on even when USERS file full -- " + SURVIVE.NOUSER.ROOM$
  611.       GOTO 12580
  612. 12530 DISPLAYED.PAGE.NUMBER = 14
  613.       GOSUB 24800
  614.       GOTO 12580
  615. 12540 DISPLAYED.PAGE.NUMBER = 15
  616.       GOSUB 24800
  617.       GOTO 12580
  618. 12550 DISPLAYED.PAGE.NUMBER = 16
  619.       GOSUB 24800
  620.       GOTO 12580
  621. 12560 DISPLAYED.PAGE.NUMBER = 17
  622.       GOSUB 24800
  623.       GOTO 12580
  624. 12570 DISPLAYED.PAGE.NUMBER = 18
  625.       GOSUB 24800
  626.       GOTO 12580
  627. 12580 GOSUB 24890
  628. 12590 GOSUB 22160
  629.       IF IX THEN _            'IX       Key    Where to branch to
  630.          ON IX GOTO 12360, _  ' 1        F1 - Global Parameters (Part 1)
  631.                     12370, _  ' 2        F2 - Global Parameters (Part 2)
  632.                     12380, _  ' 3        F3 - Global Parameters (Part 3)
  633.                     12390, _  ' 4        F4 - Static RBBS-PC Files
  634.                     12400, _  ' 5        F5 - Dynamic RBBS-PC Files
  635.                     12410, _  ' 6        F6 - RBBS-PC "doors"
  636.                     12420, _  ' 7        F7 - RBBS-PC security parameters
  637.                     12470, _  ' 8        F8 - Multiple RBBS-PC parameters
  638.                     12480, _  ' 9        F9 - RBBS-PC's utilities
  639.                     12490, _  '10       F10 - RBBS-PC File Manager
  640.                     12500, _  '11  Shift-F1 - RBBS-PC communications parameters
  641.                     12510, _  '12  Shift-F2 - RBBS-PC Net Mail
  642.                     12520, _  '13  Shift-F3 - New user parameters
  643.                     12310, _  '14  Shift-F4 - Reserved for future use
  644.                     12310, _  '15  Shift-F5 - Reserved for future use
  645.                     12310, _  '16  Shift-F6 - Reserved for future use
  646.                     12310, _  '17  Shift-F7 - Reserved for future use
  647.                     12310, _  '18  Shift-F8 - Reserved for future use
  648.                     12340, _  '19      PgUp - Go to previous page
  649.                     12330, _  '20      PgDn - Go to next page
  650.                     12630, _  '21       End - Terminate CONFIG
  651.                     12620     '22  Enter - Option selected followed by "enter"
  652.       GOTO 12590
  653. 12620 GOSUB 50340
  654.       IF VAL(HJ$) < 1 OR VAL(HJ$) > 260 THEN _
  655.          GOTO 12580
  656.       IPAGE = INT(VAL(HJ$)/20)
  657.       ILOOKUP = VAL(HJ$) - (20*IPAGE)
  658.       IPAGE = IPAGE + 1
  659.       IF ILOOKUP < 1 THEN _
  660.          ILOOKUP = 20 : _
  661.          IPAGE = IPAGE - 1
  662. 12630 EXIT SUB
  663. '
  664. ' *****************************************************************************
  665. ' * IDENTIFY THE NETWORK TYPES THAT RBBS-PC CAN RUN IN                        *
  666. ' *****************************************************************************
  667. '
  668. 21810 CLS
  669.       LOCATE 3,5
  670.       PRINT "RBBS-PC is supported in the following:"
  671.       LOCATE 5,20
  672.       PRINT "Environment"
  673.       LOCATE 7,10
  674.       PRINT "0. Single RBBS-PC in an IBM DOS environment"
  675.       LOCATE 9,10
  676.       PRINT "1. MultiLink (multi-tasking under single DOS)
  677.       LOCATE 11,10
  678.       PRINT "2. Omninet (CORVUS)"
  679.       LOCATE 13,10
  680.       PRINT "3. PC-NET (Orchid)"
  681.       LOCATE 15,10
  682.       PRINT "4. DESQview (Quarterdeck)"
  683.       LOCATE 17,10
  684.       PRINT "5. IBM DOS (3.1 or above) file sharing not supported"
  685. 21870 GOSUB 50340
  686.       XX$ = "Select environment (0 to 5, ENTER to end)"
  687.       GOSUB 50345
  688.       LINE INPUT;X$
  689.       IF X$ = "" THEN _
  690.          RETURN
  691.       NETWORK.TYPE = VAL(X$)
  692.       GOSUB 21890
  693.       RETURN
  694. 21890 IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 5 GOTO 21870
  695. 21895 IF NETWORK.TYPE = 0 THEN _
  696.          NETWORK.TYPE$ = "IBM's DOS
  697. 21900 IF NETWORK.TYPE = 1 THEN _
  698.          NETWORK.TYPE$ = "MultiLink
  699.       IF NETWORK.TYPE = 2 THEN _
  700.          NETWORK.TYPE$ = "Omninet
  701.       IF NETWORK.TYPE = 3 THEN _
  702.          NETWORK.TYPE$ = "PC-NET
  703.       IF NETWORK.TYPE = 4 THEN _
  704.          NETWORK.TYPE$ = "DESQview"
  705.       IF NETWORK.TYPE = 5 THEN _
  706.          NETWORK.TYPE$ = "IBM's file sharing -- future"
  707.       RETURN
  708. '
  709. ' *****************************************************************************
  710. ' * COMMON SUBROUTINE TO HANDLE THE FUNCTION KEYS, SCROLL BETWEEN CONFIG'S    *
  711. ' * PAGES OF OPTIONS, AND USER'S SELECTING A NUMERIC 4-CHARACTER OPTION.      *
  712. ' *****************************************************************************
  713. '
  714. 22160 I! = FRE(C$)
  715.       Y$ = INKEY$
  716.       IX = 0
  717.       IF LEN(Y$) < 1 THEN _
  718.          GOTO 22160
  719.       IF LEN(Y$) = 2 THEN _               ' IF A FUNCTION KEY, BRANCH
  720.          GOTO 22240
  721.       IF ASC(Y$) = 13 THEN _              ' IF A CARRIAGE RETURN, RETURN
  722.          IX = 22 : _
  723.          RETURN
  724.       IF ASC(Y$) = 8 AND LEN(HJ$) > 0 THEN _
  725.          HJ$ = LEFT$(HJ$,LEN(HJ$)-1) : _
  726.          PRINT CHR$(29) + " " + CHR$(29); : _
  727.          GOTO 22160
  728.       IF ASC(Y$) < 48 OR ASC(Y$) > 57 THEN _
  729.          GOTO 22160
  730.       PRINT Y$;
  731.       HJ$ = HJ$ + Y$
  732.       OPTION$ = HJ$
  733.       IF LEN(HJ$) > 4 THEN _              ' IF MORE THAN FOUR CHARACTERS,
  734.          IX = 22                          ' RETURN
  735.       RETURN
  736. '
  737. ' *****************************************************************************
  738. ' * COMMON SUBROUTINE TO HANDLE SET UP RETURN CODES FOR FUNCTION KEYS THAT    *
  739. ' * WERE PRESSED ON THE LOCAL PC RUNNING CONFIG                               *
  740. ' *****************************************************************************
  741. '
  742. 22240 IX = ASC(RIGHT$(Y$,1))
  743.       Y$ = "
  744.       IF IX < 59 OR IX > 91 THEN _        ' IGNORE IF NOT F1 THROUGH F10 OR
  745.          IX = 0: _                        ' SHIFT-F1 THROUGH SHIFT-F8
  746.          RETURN
  747.       IF IX = 73 THEN _                   ' IF PGUP THEN SET IX = 19
  748.          IX = 19 : _
  749.          RETURN
  750.       IF IX = 79 THEN _                   ' IF END THEN SET IX = 21
  751.          IX = 21 : _
  752.          RETURN
  753.       IF IX = 81 THEN _                   ' IF PGDN THEN SET IX = 20
  754.          IX = 20 : _
  755.          RETURN
  756.       IF (IX-58) < 11 THEN _              ' IF F1 THROUGH F10 SET IX = 1
  757.          IX = IX-58 : _                   ' THROUGH 10 ACCORDINGLY.
  758.          RETURN
  759.       IF (IX-73) > 10 AND _               ' IF SHIFT-F1 THROUGH SHIFT-F8 THEN
  760.          (IX-73) < 19 THEN _              ' SET IX = 11 THROUGH 18
  761.             IX = IX - 73 : _              ' ACCORDINGLY.
  762.             RETURN
  763.       IX = 0
  764.       RETURN
  765. '
  766. ' *****************************************************************************
  767. ' * ROUTINE TO DISPLAY THE PAGE HEADER FOR CONFIG'S DISPLAYS                  *
  768. ' *****************************************************************************
  769. '
  770. 24800 CLS
  771.       I! = FRE(C$)
  772.       COLOR 0,7,0
  773.       LOCATE 1,10
  774.       PRINT "RBBS-PC CPC15.1 Default Configuration " + CONFIG.VERSION$;
  775.       IF F THEN _
  776.          GOSUB 24970
  777.       COLOR FG,BG,BORDER
  778.       PRINT " Page" + STR$(DISPLAYED.PAGE.NUMBER) + " of" + STR$(MAXIMUM.DISPLAYABLE.PAGES)
  779.       RETURN
  780. 24890 A$ = "Enter parameter # to change, END to update, PgUp/PgDn to scroll:"
  781. 24900 LOCATE 24,5
  782.       PRINT A$;
  783.       X = POS(0) + 2
  784.       PRINT STRING$((75-LEN(A$)),32);
  785.       LOCATE 24,X
  786.       COLOR FG,BG,BORDER
  787.       HJ$ = "
  788.       I! = FRE(C$)
  789.       RETURN
  790. '
  791. ' *****************************************************************************
  792. ' * ROUTINE TO DISPLAY CONFERENCE MAINTENANCE MODE IN CONFIG'S DISPLAYS       *
  793. ' *****************************************************************************
  794. '
  795. 24970 LOCATE 2,1
  796.       PRINT SPACE$(10)
  797.       LOCATE 2,10
  798.       A$ = "Private"
  799.       IF F = 2 THEN _
  800.          A$ = "Public"
  801.       COLOR 31,0,0
  802.       PRINT "(" + A$ + " Conference Maintenance Mode for " + _
  803.             MID$(MAIN.MESSAGE.FILE$,1,INSTR(MAIN.MESSAGE.FILE$,"M.DEF")-1) + _
  804.             ")";
  805.       RETURN
  806. '
  807. ' *****************************************************************************
  808. ' * COMMON SUBROUTINE TO READ THE MESSAGES FILE'S CHECKPOINT RECORD           *
  809. ' *****************************************************************************
  810. '
  811. 30040 OPEN "R",2,MAIN.MESSAGE.FILE$,128        ' <---- read MESSAGES checkpoint record
  812.       FIELD 2,128 AS RR$
  813.       GET 2,1
  814.       CALLS.TODATE!          = VAL(MID$(RR$,1,8))     '  1-  8  =  number of last message on system
  815.       FIRST.USER.RECORD      = VAL(MID$(RR$,52,5))    ' 52- 56  =  first rec. of user file
  816.       CURRENT.USER.COUNT     = VAL(MID$(RR$,57,5))    ' 57- 61  =  next avail. user record
  817.       HIGHEST.USER.RECORD    = VAL(MID$(RR$,62,5))    ' 62- 66  =  last rec. of user file
  818.       FIRST.MESSAGE.RECORD   = VAL(MID$(RR$,68,7))    ' 68- 74 = first rec. of msgs file
  819.       NEXT.MESSAGE.RECORD    = VAL(MID$(RR$,75,7))    ' 75- 81 = next avail. msgs record
  820.       HIGHEST.MESSAGE.RECORD = VAL(MID$(RR$,82,7))    ' 82- 88 = last rec. of msgs file
  821.       MAXIMUM.NUMBER.OF.MSGS = VAL(MID$(RR$,89,7))    ' 89- 95 = maximum number of messages
  822.       MAXIMUM.NUMBER.OF.NODES = VAL(MID$(RR$,127,2))   '127-128 = maximum number of "nodes"
  823.       CLOSE 2
  824.       RETURN
  825. '
  826. ' *****************************************************************************
  827. ' * COMMON ROUTINE TO GET THE LENGTH OF A FILE                                *
  828. ' *****************************************************************************
  829. '
  830. 30180 OPEN "R",2,FILE$,128      ' <---- get length of file
  831.       FIELD 2,128 AS RR$
  832.       UG = LOF(2)/128
  833.       CLOSE 2
  834.       RETURN
  835. '
  836. ' *****************************************************************************
  837. ' * COMMON SUBROUTINE TO KEEP STRING SPACE CLEAN AND CLEAR LINE 24            *
  838. ' *****************************************************************************
  839. '
  840. 50340 I! = FRE(C$)
  841.       LOCATE 24,1
  842.       PRINT STRING$(79,32);
  843.       RETURN
  844. '
  845. ' *****************************************************************************
  846. ' * COMMON SUBROUTINE TO DISPLAY A MESSAGE ON LINE 24                         *
  847. ' *****************************************************************************
  848. '
  849. 50345 GOSUB 50340
  850.       LOCATE 24,5
  851.       PRINT XX$;
  852.       RETURN
  853. '
  854. ' *****************************************************************************
  855. ' * COMMON SUBROUTINE TO BEEP AT THE SYSOP                                    *
  856. ' *****************************************************************************
  857. '
  858. 60380 FOR I = 1 TO 3
  859.         SOUND 1000*I,1
  860.       NEXT
  861.       RETURN
  862.       END SUB
  863. '  $SUBTITLE: 'CNFGINIT - subroutine to initialize CONFIG's constants'
  864. '  $PAGE
  865. '
  866. '  SUBROUTINE NAME    --  CNFGINIT
  867. '
  868. '  INPUT PARAMETERS   --  NONE
  869. '
  870. '  OUTPUT PARAMETERS  --  CONFIG'S CONSTANTS INITIALIZED
  871. '
  872. '  SUBROUTINE PURPOSE --  TO INITIALIZE THE CONSTANTS USED BY CONFIG
  873. '
  874. 60385 SUB CNFGINIT STATIC
  875. '
  876. ' *****************************************************************************
  877. ' * INITALIZE ALL VARIABLES IF A .DEF FILE DOESN'T AREADY EXIST               *
  878. ' *****************************************************************************
  879. '
  880.       D$                         = DD$ + ":"
  881.       FALSE                      = 0
  882.       TRUE                       = NOT FALSE
  883.       SYSOP.SECURITY.LEVEL       = 10
  884.       ACT.MNTHS.B4.DELETING      = 1
  885.       ACTIVE.BULLETINS           = 6
  886.       ALWAYS.STREW.TO$           = ""
  887.       ANS.MENU$                  = D$ + "MENUA"
  888.       ASK.IDENTITY               = FALSE
  889.       BG                         = 0
  890.       BORDER                     = 0
  891.       BUFFER.SIZE                = 128
  892.       BULLETIN.MENU$             = "BULLET"
  893.       BULLETIN.PREFIX$           = "BULLET"
  894.       BULLETINS.OPTIONAL         = TRUE
  895.       C$                         = ""
  896.       CALLERS.FILE$              = D$ + "CALLERS"
  897.       CODE.TYPE                  = FALSE
  898.       COM.PORT$                  = "COM1"
  899.       COMMANDS.BETWEEN.RINGS     = FALSE
  900.       COMMANDS.IN.PROMPT         = TRUE
  901.       COMMENTS.AS.MESSAGES       = FALSE
  902.       COMMENTS.FILE$             = D$ + "COMMENTS"
  903.       COMPUTER.TYPE              = 0
  904.       CONFERENCE.MENU$           = D$ + "CONFENCE"
  905.       CONFERENCE.VIEWER.SEC.LVL  = 0
  906.       CONFIG.VERSION$            = "(Version 3.00)"
  907.       DEFAULT.CATEGORY.CODE$     = "UC "
  908.       DAYS.IN.SUBSCRIPTION.PERIOD = 365
  909.       DAYS.TO.WARN               = 60
  910.       DIR.CATEGORY.FILE$         = D$ + "DIR.CAT"
  911.       DEFAULT.MACHINE.TYPE$      = "IBMPC"
  912.       DEFAULT.SECURITY.LEVEL     = 5
  913.       DIRECTORY.EXTENTION$       = "DIR"
  914.       DIRECTORY.PATH$            = D$
  915.       DISK.FOR.DOS$              = D$
  916.       DISKFULL.GO.OFFLINE        = TRUE
  917.       DNLD.SUB                   = 0
  918.       DOORS.AVAILABLE            = FALSE
  919.       DOORS.SECURITY.LEVEL       = SYSOP.SECURITY.LEVEL
  920.       DOORS.TERMINAL.TYPE        = 8
  921.       DOS.VERSION                = 2
  922.       DOWNLOAD.DRIVES$           = DD$ + DD$
  923.       DOWNLOAD.TO.SUBDIR         = FALSE
  924.       DRIVE.FOR.BULLETINS$       = DD$
  925.       DRIVE.FOR.HELP.FILES$      = DD$
  926.       DTR.DROP.DELAY             = 3
  927.       DUMB.MODEM                 = FALSE
  928.       END.OFFICE.HOURS           = 2200
  929.       EXPERT.USER                = 0
  930.       EXPIRED.SECURITY           = DEFAULT.SECURITY.LEVEL
  931.       EXTENDED.LOGGING           = FALSE
  932.       FC                         = 5
  933.       FG                         = 7
  934.       FILE.COMMANDS.DEFAULTS$    = "DGLNSUV"
  935.       FILE.COMMANDS$             = FILE.COMMANDS.DEFAULTS$
  936.       FILE.NOTIFY                = FALSE
  937.       FILES.FUNCTION$(1,1)       = "D)ownload a file      "
  938.       FILES.FUNCTION$(2,1)       = "G)oodbye              "
  939.       FILES.FUNCTION$(3,1)       = "L)ist file directory  "
  940.       FILES.FUNCTION$(4,1)       = "N)ew file search      "
  941.       FILES.FUNCTION$(5,1)       = "S)earch files         "
  942.       FILES.FUNCTION$(6,1)       = "U)pload a file        "
  943.       FILES.FUNCTION$(7,1)       = "V)erbose ARC list     "
  944.       FILES.FUNCTION$(1,2)       = "D"
  945.       FILES.FUNCTION$(2,2)       = "G"
  946.       FILES.FUNCTION$(3,2)       = "L"
  947.       FILES.FUNCTION$(4,2)       = "N"
  948.       FILES.FUNCTION$(5,2)       = "S"
  949.       FILES.FUNCTION$(6,2)       = "U"
  950.       FILES.FUNCTION$(7,2)       = "V"
  951.       FILESEC.FILE$              = D$ + "FILESEC"
  952.       GB                         = FC
  953.       GLOBAL.COMMANDS.DEFAULTS$  = "H?QX"
  954.       GLOBAL.COMMANDS$           = GLOBAL.COMMANDS.DEFAULTS$
  955.       GLOBAL.FUNCTION$(1,1)      = "H)elp on-line         "
  956.       GLOBAL.FUNCTION$(2,1)      = "?)help on-line (=H)   "
  957.       GLOBAL.FUNCTION$(3,1)      = "Q)uit this part       "
  958.       GLOBAL.FUNCTION$(4,1)      = "X)Expert toggle on/off"
  959.       GLOBAL.FUNCTION$(1,2)      = "H"
  960.       GLOBAL.FUNCTION$(2,2)      = "?"
  961.       GLOBAL.FUNCTION$(3,2)      = "Q"
  962.       GLOBAL.FUNCTION$(4,2)      = "X"
  963.       GO.TO.SHELL                = TRUE
  964.       HELP$(3)                   = "HELP03"
  965.       HELP$(4)                   = "HELP04"
  966.       HELP$(7)                   = "HELP07"
  967.       HELP$(9)                   = "HELP09"
  968.       HELP.EXTENSION$            = "HLP"
  969.       HELP.FILE.PREFIX$          = "HELP0"
  970.       HELP.PATH$                 = D$
  971.       IB                         = 0
  972.       LEN.HASH                   = 31
  973.       LEN.INDIV                  = 0
  974.       LIMIT.DAILY.TIME           = FALSE
  975.       LIMIT.SEARCH.TO.FMS        = FALSE
  976.       LOCAL.PASSWORD$            = "RBBS-PC"
  977.       MAIN.COMMANDS.DEFAULTS$    = "ABCDEFIJKOPRSTUVW"
  978.       MAIN.COMMANDS$             = MAIN.COMMANDS.DEFAULTS$
  979.       MAIN.FUNCTION$(1,1)        = "A)nswer questionnaire "
  980.       MAIN.FUNCTION$(2,1)        = "B)ulletins            "
  981.       MAIN.FUNCTION$(3,1)        = "C)omments             "
  982.       MAIN.FUNCTION$(4,1)        = "D)oor subsystem       "
  983.       MAIN.FUNCTION$(5,1)        = "E)nter message        "
  984.       MAIN.FUNCTION$(6,1)        = "F)iles subsystem      "
  985.       MAIN.FUNCTION$(7,1)        = "I)nitial welcome      "
  986.       MAIN.FUNCTION$(8,1)        = "J)oin a conference    "
  987.       MAIN.FUNCTION$(9,1)        = "K)ill messages        "
  988.       MAIN.FUNCTION$(10,1)       = "O)perator page        "
  989.       MAIN.FUNCTION$(11,1)       = "P)ersonal mail        "
  990.       MAIN.FUNCTION$(12,1)       = "R)ead messages        "
  991.       MAIN.FUNCTION$(13,1)       = "S)can messages header "
  992.       MAIN.FUNCTION$(14,1)       = "T)opic msg scan       "
  993.       MAIN.FUNCTION$(15,1)       = "U)tilities subsystem  "
  994.       MAIN.FUNCTION$(16,1)       = "V)iew a conference    "
  995.       MAIN.FUNCTION$(17,1)       = "W)ho's on other nodes "
  996.       MAIN.FUNCTION$(1,2)        = "A"
  997.       MAIN.FUNCTION$(2,2)        = "B"
  998.       MAIN.FUNCTION$(3,2)        = "C"
  999.       MAIN.FUNCTION$(4,2)        = "D"
  1000.       MAIN.FUNCTION$(5,2)        = "E"
  1001.       MAIN.FUNCTION$(6,2)        = "F"
  1002.       MAIN.FUNCTION$(7,2)        = "I"
  1003.       MAIN.FUNCTION$(8,2)        = "J"
  1004.       MAIN.FUNCTION$(9,2)        = "K"
  1005.       MAIN.FUNCTION$(10,2)       = "O"
  1006.       MAIN.FUNCTION$(11,2)       = "P"
  1007.       MAIN.FUNCTION$(12,2)       = "R"
  1008.       MAIN.FUNCTION$(13,2)       = "S"
  1009.       MAIN.FUNCTION$(14,2)       = "T"
  1010.       MAIN.FUNCTION$(15,2)       = "U"
  1011.       MAIN.FUNCTION$(16,2)       = "V"
  1012.       MAIN.FUNCTION$(17,2)       = "W"
  1013.       MAIN.MESSAGE.BACKUP$       = D$ + "MESSAGES.BAK"
  1014.       MAIN.MESSAGE.FILE$         = D$ + "MESSAGES"
  1015.       MAIN.USER.FILE$            = D$ + "USERS"
  1016.       MASTER.DIRECTORY.NAME$     = ""
  1017.       MAX.ALLOWED.MSGS.FRM.DEF   = 5
  1018.       MAX.DESC.LEN               = 40
  1019.       MAX.MESSAGE.LINES          = 19
  1020.       MAX.USR.FILE.SIZE.FRM.DEF  = 16
  1021.       MAXD                       = SYSOP.SECURITY.LEVEL
  1022.       MAXIMUM.DISPLAYABLE.PAGES  = 12
  1023.       MAXIMUM.PASSWORD.CHANGES   = 3
  1024.       MAXIMUM.VIOLATIONS         = 5
  1025.       MAXIMUM.NUMBER.OF.NODES    = 1
  1026.       MENU$(1)                   = D$ + "MENU1"
  1027.       MENU$(2)                   = D$ + "MENU2"
  1028.       MENU$(3)                   = D$ + "MENU3"
  1029.       MENU$(4)                   = D$ + "MENU4"
  1030.       MENU$(5)                   = D$ + "MENU5"
  1031.       MESSAGE.REMINDER           = TRUE
  1032.       MIN.SEC.TO.VIEW            = DEFAULT.SECURITY.LEVEL
  1033.       MINIMUM.LOGON.SECURITY     = 0
  1034.       MINIMUM.SECURITY.FOR.TEMP.PASSWORD = 5
  1035.       MINUTES.PER.SESSION!       = 72
  1036.       MLCOM                      = FALSE
  1037.       MM                         = 5
  1038.       MNP.SUPPORT                = FALSE
  1039.       MO$                        = DD$
  1040.       MODEM.ANSWER.COMMAND$      = "ATQ0X1V1A"
  1041.       MODEM.COMMAND.DELAY.TIME   = 1
  1042.       MODEM.COUNT.RINGS.COMMAND$ = "ATS1?"
  1043.       MODEM.GO.OFFHOOK.COMMAND$  = "ATQ1E1H1M0"
  1044.       MODEM.INIT.BAUD$           = "300"
  1045.       MODEM.INIT.COMMAND$        = "ATM0Q1S2=255S10=30E0S0=0    "
  1046.       MODEM.INIT.WAIT.TIME       = 2
  1047.       MODEM.RESET.COMMAND$       = "ATZ"
  1048.       MUSIC                      = FALSE
  1049.       NETWORK.TYPE               = 0
  1050.       NETWORK.TYPE$              = "IBM's DOS"
  1051.       NEW.FILES.CHECK            = FALSE
  1052.       NEWUSER.FILE$              = D$ + "NEWUSER"
  1053.       NEWUSER.SETS.DEFAULTS      = TRUE
  1054.       OMIT.MAIN.DIRECTORY$       = "NO"
  1055.       OMIT.UPLOAD.DIRECTORY$     = "NO"
  1056.       OVERWRITE.SECURITY.LEVEL   = SYSOP.SECURITY.LEVEL
  1057.       PAGE.LENGTH                = 23
  1058.       PAGING.PRINTER.SUPPORT$    = ". "
  1059.       PASSWORD.FILE$             = D$ + "PASSWRDS"
  1060.       PCJR                       = 0
  1061.       PROTOCOL.PATH$             = D$
  1062.       PROMPT.BELL                = 0
  1063.       PROMPT.HASH$               = "Name"
  1064.       PROMPT.INDIV$              = ""
  1065.       RBBS.BAT$                  = D$ + "RBBS.BAT"
  1066.       RBBS.NAME$                 = "RBBS-PC"
  1067.       RCTTY.BAT$                 = D$ + "RCTTY.BAT"
  1068.       RECYCLE.TO.DOS             = 0
  1069.       RECYCLE.TO.DOS$            = "INTERNAL"
  1070.       REDIRECT.IO.METHOD         = TRUE
  1071.       REMEMBER.NEW.USERS         = TRUE
  1072.       REMIND.FILE.TRANSFERS      = FALSE
  1073.       REMIND.PROFILE             = FALSE
  1074.       REQUIRE.NON.ASCII          = TRUE
  1075.       REQUIRED.QUESTIONNAIRE$    = "NONE"
  1076.       REQUIRED.RINGS             = 1
  1077.       RESTRICT.BAUD              = FALSE
  1078.       RESTRICT.BY.DATE           = FALSE
  1079.       RESTRICT.VALID.CMDS        = FALSE
  1080.       SEC.LVL.EXEMPT.FRM.PURGING = SYSOP.SECURITY.LEVEL
  1081.       SF                         = SYSOP.SECURITY.LEVEL
  1082.       SHOOT.YOURSELF             = FALSE
  1083.       SHOW.SECTION               = TRUE
  1084.       SL.CATEGORIZE.UPLOADS      = SYSOP.SECURITY.LEVEL
  1085.       START.HASH                 = 1
  1086.       START.INDIV                = 0
  1087.       START.OFFICE.HOURS         = 800
  1088.       SURVIVE.NOUSER.ROOM        = FALSE
  1089.       SYSOP.COMMANDS.DEFAULTS$   = "1234567"
  1090.       SYSOP.COMMANDS$            = SYSOP.COMMANDS.DEFAULTS$
  1091.       SYSOP.FUNCTION$(1,1)       = " 1 List comments      "
  1092.       SYSOP.FUNCTION$(2,1)       = " 2 List CALLERS log   "
  1093.       SYSOP.FUNCTION$(3,1)       = " 3 Recover a message  "
  1094.       SYSOP.FUNCTION$(4,1)       = " 4 Erase comments     "
  1095.       SYSOP.FUNCTION$(5,1)       = " 5 User maintenance   "
  1096.       SYSOP.FUNCTION$(6,1)       = " 6 Toggle Page bell   "
  1097.       SYSOP.FUNCTION$(7,1)       = " 7 Exit to DOS        "
  1098.       SYSOP.FUNCTION$(1,2)       = " 1"
  1099.       SYSOP.FUNCTION$(2,2)       = " 2"
  1100.       SYSOP.FUNCTION$(3,2)       = " 3"
  1101.       SYSOP.FUNCTION$(4,2)       = " 4"
  1102.       SYSOP.FUNCTION$(5,2)       = " 5"
  1103.       SYSOP.FUNCTION$(6,2)       = " 6"
  1104.       SYSOP.FUNCTION$(7,2)       = " 7"
  1105.       SYSOP.FIRST.NAME$          = "TOM"
  1106.       SYSOP.LAST.NAME$           = "MACK"
  1107.       SYSOP.MENU.SECURITY.LEVEL  = SYSOP.SECURITY.LEVEL
  1108.       SYSOP.PASSWORD.1$          = "RBBS-PC"
  1109.       SYSOP.PASSWORD.2$          = "CPC15"
  1110.       TIME.TO.DROP.TO.DOS        = -1
  1111.       TRASHCAN.FILE$             = D$ + "TRASHCAN"
  1112.       TURN.PRINTER.OFF           = FALSE
  1113.       TURBO.RBBS                 = TRUE
  1114.       UE                         = 5
  1115.       FMS.DIRECTORY$             = ""
  1116.       UPCAT.HELP$                = "UPCAT"
  1117.       UPLOAD.DIRECTORY$          = "99"
  1118.       UPLOAD.PATH$               = D$
  1119.       UPLOAD.SUBDIR$             = ""
  1120.       UPLOAD.TIME.FACTOR!        = 0
  1121.       UPLOAD.TO.SUBDIR           = FALSE
  1122.       USE.COLOR                  = FALSE
  1123.       USE.EXTERNAL.XMODEM        = FALSE
  1124.       UTIL.COMMANDS.DEFAULTS$    = "BCFGLMPRSTU"
  1125.       UTIL.COMMANDS$             = UTIL.COMMANDS.DEFAULTS$
  1126.       UTILITY.FUNCTION$(1,1)     = "B)aud rate            "
  1127.       UTILITY.FUNCTION$(2,1)     = "C)lock (time)         "
  1128.       UTILITY.FUNCTION$(3,1)     = "F)ile x-fer protocol  "
  1129.       UTILITY.FUNCTION$(4,1)     = "G)raphics             "
  1130.       UTILITY.FUNCTION$(5,1)     = "L)ines per page       "
  1131.       UTILITY.FUNCTION$(6,1)     = "M)sg margin setting   "
  1132.       UTILITY.FUNCTION$(7,1)     = "P)assword change      "
  1133.       UTILITY.FUNCTION$(8,1)     = "R)eview defaults      "
  1134.       UTILITY.FUNCTION$(9,1)     = "S)tatistics           "
  1135.       UTILITY.FUNCTION$(10,1)    = "T)oggle               "
  1136.       UTILITY.FUNCTION$(11,1)    = "U)ser log scan        "
  1137.       UTILITY.FUNCTION$(1,2)     = "B"
  1138.       UTILITY.FUNCTION$(2,2)     = "C"
  1139.       UTILITY.FUNCTION$(3,2)     = "F"
  1140.       UTILITY.FUNCTION$(4,2)     = "G"
  1141.       UTILITY.FUNCTION$(5,2)     = "L"
  1142.       UTILITY.FUNCTION$(6,2)     = "M"
  1143.       UTILITY.FUNCTION$(7,2)     = "P"
  1144.       UTILITY.FUNCTION$(8,2)     = "R"
  1145.       UTILITY.FUNCTION$(9,2)     = "S"
  1146.       UTILITY.FUNCTION$(10,2)    = "T"
  1147.       UTILITY.FUNCTION$(11,2)    = "U"
  1148.       WAIT.BEFORE.DISCONNECT     = 180
  1149.       WELCOME.FILE$              = D$ + "WELCOME"
  1150.       WELCOME.INTERRUPTABLE      = TRUE
  1151.       WILL.SUBDIRS.B.USED        = FALSE
  1152.       FOR I = 1 TO NUM.SYSOP
  1153.         SYSOP.FUNCTION(I) = SF
  1154.       NEXT
  1155.       FOR I = 1 TO NUM.MAIN
  1156.         MAIN.FUNCTION(I) = MM
  1157.       NEXT
  1158.       FOR I = 1 TO NUM.FILES
  1159.         FILES.FUNCTION(I) = FC
  1160.       NEXT
  1161.       FOR I = 1 TO NUM.UTILITY
  1162.         UTILITY.FUNCTION(I) = UE
  1163.       NEXT
  1164.       FOR I = 1 TO NUM.GLOBAL
  1165.         GLOBAL.FUNCTION(I) = GB
  1166.       NEXT
  1167.       END SUB
  1168. '  $SUBTITLE: 'ASKRO - ask a question at a specific row'
  1169. '  $PAGE
  1170. '
  1171. '  SUBROUTINE NAME    --  ASKRO
  1172. '
  1173. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1174. '                         ANS$           STRING TO PUT THE ANSWER IN
  1175. '                         STRNG$         STRING CONTAINING THE QUESTION
  1176. '                         RO             ROW TO ASK THE QUESTION ON
  1177. '
  1178. '  OUTPUT PARAMETERS  --  ANS$           RESPONSE FROM THE KEYBOARD
  1179. '
  1180. '  SUBROUTINE PURPOSE --  TO ASK A QUESTION ON THE PC'S DISPLAY AT A
  1181. '                         SPECIFIC ROW
  1182. '
  1183.       SUB ASKRO (STRNG$,RO,ANS$) STATIC
  1184. 61100 LOCATE RO,1
  1185.       PRINT SPACE$(79);
  1186.       LOCATE RO,5
  1187.       PRINT STRNG$;" ";
  1188.       LINE INPUT;ANS$
  1189.       END SUB
  1190. '  $SUBTITLE: 'GETNUMYN - get a TRUE-FALSE answer to a YES OR NO question'
  1191. '  $PAGE
  1192. '
  1193. '  SUBROUTINE NAME    --  GETNUMYN
  1194. '
  1195. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1196. '                         STRNG$         STRING CONTAINING THE QUESTION
  1197. '
  1198. '  OUTPUT PARAMETERS  --  ANS            Returned value - -1 IF yes, 0 IF no
  1199. '
  1200. '  SUBROUTINE PURPOSE --  TO ASK A QUESTION ON THE PC'S DISPLAY AND GET A
  1201. '                         YES OR NO ANSWER CONVERTED TO TRUE/FALSE
  1202. '
  1203.        SUB GETNUMYN (STRNG$,ANS) STATIC
  1204.        CALL GETYESNO (STRNG$,ANS$)
  1205.        ANS = FNYESNO (ANS$)
  1206.        END SUB
  1207. '  $SUBTITLE: 'GETNUMYN - Ask a YES OR NO question'
  1208. '  $PAGE
  1209. '
  1210. '  SUBROUTINE NAME    --  GETYESNO
  1211. '
  1212. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1213. '                         ANS$           STRING TO PUT THE ANSWER IN
  1214. '                         STRNG$         STRING CONTAINING THE QUESTION
  1215. '
  1216. '  OUTPUT PARAMETERS  --  ANS$           RESPONSE FROM THE KEYBOARD
  1217. '
  1218. '  SUBROUTINE PURPOSE --  TO ASK A QUESTION ON THE PC'S DISPLAY AND GET A
  1219. '                         YES OR NO ANSWER
  1220. '
  1221.       SUB GETYESNO (STRNG$,ANS$) STATIC
  1222. 61200 CALL ASKRO (STRNG$+" (YES or NO)",24,HJ$)
  1223.       L = LEN(HJ$)
  1224.       IF L<1 OR L>3 THEN _
  1225.          GOTO 61207
  1226.       CALL ALLCAPS(HJ$)
  1227.       X = INSTR("NY",LEFT$(HJ$,1))
  1228.       ON X GOTO 61210,61212
  1229. 61207 BEEP
  1230.       GOTO 61200
  1231. 61210 ANS$ = "NO"
  1232.       EXIT SUB
  1233. 61212 ANS$ = "YES"
  1234.       EXIT SUB
  1235.       END SUB
  1236. '  $SUBTITLE: 'ALLCAPS - convert a sting into all capital letters'
  1237. '  $PAGE
  1238. '
  1239. '  SUBROUTINE NAME    --  ALLCAPS
  1240. '
  1241. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1242. '                         STRNG$         STRING CONTAINING THE QUESTION
  1243. '
  1244. '  OUTPUT PARAMETERS  --  STRNG$         CAPITALIZED STRING
  1245. '
  1246. '  SUBROUTINE PURPOSE --  TO CAPITALIZE A STRING
  1247. '
  1248.       SUB ALLCAPS (STRNG$) STATIC
  1249.       FOR Z = 1 TO LEN(STRNG$)
  1250.         MID$(STRNG$,Z,1) = CHR$(ASC(MID$(STRNG$,Z,1)) + _
  1251.                            32*(ASC(MID$(STRNG$,Z,1))>96))
  1252.       NEXT
  1253.       END SUB
  1254. '  $SUBTITLE: 'ASKUPOS - find the unique user field for USERS'
  1255. '  $PAGE
  1256. '
  1257. '  SUBROUTINE NAME    --  ASKUPOS
  1258. '
  1259. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1260. '                         HDR$           HEADER
  1261. '                         BEGIN.COL      BEGINNING COLUMN OF FIELD
  1262. '                         FIELD.LEN      LENGTH OF FIELD IN USER'S RECORD
  1263. '                         PRMPT$         PROMPT TO GIVE FOR FIELD
  1264. '
  1265. '  OUTPUT PARAMETERS  --  ABOVE INPUTS UPDATED WITH USER'S RESPONSES
  1266. '
  1267. '  SUBROUTINE PURPOSE --  TO ASK THE SYSOP WHAT UNIQUE FIELD IN THE USERS
  1268. '                         RECORD IS TO BE ASKED FOR AT LOGON
  1269. '
  1270.       SUB ASKUPOS (HDR$,BEGIN.COL,FIELD.LEN,PRMPT$) STATIC
  1271.       CLS
  1272.       LOCATE 3,20
  1273.       PRINT HDR$;
  1274. 61300 LOCATE 6,5
  1275.       PRINT "1.  BEGINNING COLUMN in CALLERS file";TAB(44);STR$(BEGIN.COL);"   ";
  1276.       LOCATE 8,5
  1277.       PRINT "2.  Number of CHARACTERS to use";TAB(44);STR$(FIELD.LEN);"   ";
  1278.       LOCATE 10,5
  1279.       PRINT "3.  PROMPT to display to callers";TAB(45);PRMPT$;SPACE$(34-LEN(PRMPT$));
  1280. 61310 CALL ASKRO ("Select option to change (1-3, ENTER to end)",24,X$)
  1281.       IF X$ = "" THEN _
  1282.          EXIT SUB
  1283.       X = VAL(X$)
  1284.       IF X < 1 OR X > 3 THEN _
  1285.          GOTO 61310
  1286.       ON X GOTO 61320,61330,61340
  1287. 61320 CALL ASKRO ("New BEGINNING COLUMN",24,HJ$)
  1288.       IF HJ$ = "" THEN _
  1289.          GOTO 61320
  1290.       X = VAL(HJ$)
  1291.       IF X < 0 OR X > 128 THEN _
  1292.          GOTO 61320
  1293.       BEGIN.COL = X
  1294.       GOTO 61300
  1295. 61330 CALL ASKRO ("New # CHARACTERS to use",24,HJ$)
  1296.       IF HJ$ = "" THEN _
  1297.          GOTO 61330
  1298.       X = VAL(HJ$)
  1299.       IF X < 0 OR X > 31 THEN _
  1300.          GOTO 61330
  1301.       FIELD.LEN = X
  1302.       GOTO 61300
  1303. 61340 CALL ASKRO ("New PROMPT",24,HJ$)
  1304.       IF LEN(HJ$) > 34 THEN _
  1305.          GOTO 61340
  1306.       PRMPT$ = HJ$
  1307.       GOTO 61300
  1308.       END SUB
  1309. '  $SUBTITLE: 'ANYNUMBER - input any numeric value'
  1310. '  $PAGE
  1311. '
  1312. '  SUBROUTINE NAME    --  ANYNUMBER
  1313. '
  1314. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1315. '                         PRMPT$           Prompt
  1316. '
  1317. '  OUTPUT PARAMETERS  --  RETURNED.VALUE!  Value returned
  1318. '
  1319. '  SUBROUTINE PURPOSE --  To get a numeric value
  1320. '
  1321.       SUB ANYNUMBER (PRMPT$,RETURNED.VALUE!) STATIC
  1322. 61400 CALL ASKRO (PRMPT$,24,HJ$)
  1323.       RETURNED.VALUE! = VAL(HJ$)
  1324.       END SUB
  1325. '  $SUBTITLE: 'ANYINTEGER - input any integer value'
  1326. '  $PAGE
  1327. '
  1328. '  SUBROUTINE NAME    --  ANYINTEGER
  1329. '
  1330. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1331. '                         PRMPT$           Prompt
  1332. '
  1333. '  OUTPUT PARAMETERS  --  RETURNED.VALUE   Value returned
  1334. '
  1335. '  SUBROUTINE PURPOSE --  To get an integer value
  1336. '
  1337.       SUB ANYINTEGER (PRMPT$,RETURNED.VALUE) STATIC
  1338. 61450 CALL ANYNUMBER (PRMPT$,RETURNED.VALUE!)
  1339.       IF RETURNED.VALUE! > 32000.0 OR RETURNED.VALUE! < -32000.0 THEN_
  1340.          BEEP : _
  1341.          GOTO 61450
  1342.       RETURNED.VALUE = RETURNED.VALUE!
  1343.       END SUB
  1344. '  $SUBTITLE: 'MMINTEGER - input any integer value with range check'
  1345. '  $PAGE
  1346. '
  1347. '  SUBROUTINE NAME    --  MMINTEGER
  1348. '
  1349. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1350. '                         PRMPT$           Prompt
  1351. '                         MIN              Minmum value inclusive
  1352. '                         MAX              Maximum value inclusive
  1353. '
  1354. '  OUTPUT PARAMETERS  --  RETURNED.VALUE   Value returned
  1355. '
  1356. '  SUBROUTINE PURPOSE --  To get an integer value within a range
  1357. '
  1358.       SUB MMINTEGER (PRMPT$,MIN,MAX,RETURNED.VALUE) STATIC
  1359. 61500 CALL ANYINTEGER (PRMPT$,RETURNED.VALUE)
  1360.       IF RETURNED.VALUE < MIN OR RETURNED.VALUE > MAX THEN _
  1361.          BEEP : _
  1362.          GOTO 61500
  1363.       END SUB
  1364. '  $SUBTITLE: 'FINDFILE - Determine whether a file exists'
  1365. '  $PAGE
  1366. '
  1367. '  SUBROUTINE NAME    --  FINDFILE
  1368. '
  1369. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1370. '                         FILNAME$         File to look for
  1371. '                         FEXISTS          Whether file exists
  1372. '
  1373. '  OUTPUT PARAMETERS  --  RETURNED.VALUE   Value returned
  1374. '
  1375. '  SUBROUTINE PURPOSE --  Determine whether passed file FILNAME$ exists
  1376. '                         Return true or false in FEXISTS
  1377. '
  1378.       SUB FINDFILE (FILNAME$,FEXISTS) STATIC
  1379. 61600 CALL RBBSFIND (FILNAME$,Z,Y,M,D)
  1380.       FEXISTS = (Z = 0)
  1381.       END SUB
  1382. '  $SUBTITLE: 'CHKFMSDIR - Validate structure of FMS directory'
  1383. '  $PAGE
  1384. '
  1385. '  SUBROUTINE NAME    --  CHKFMSDIR
  1386. '
  1387. '  INPUT PARAMETERS   --  PARAMETER         MENANING
  1388. '                         FMSDIR$         Name of FMS Directory
  1389. '                         LINELEN         Proper length of Lines
  1390. '                                         (excluding CR/LF at end)
  1391. '                         FMS.DIRCAT$     Category file for FMS
  1392. '
  1393. '  OUTPUT PARAMETERS  --  RETURNED.VALUE   Value returned
  1394. '
  1395. '  SUBROUTINE PURPOSE --  Determine whether passed file FILNAME$ exists
  1396. '                         Return true or false in FEXISTS
  1397. '
  1398. 61700 SUB CHKFMSDIR (FMSDIR$,LINELEN,FMS.DIRCAT$) STATIC
  1399.       DIM CAT.CODE$(99)
  1400.       CLS
  1401.       LOCATE 5,20
  1402.       PRINT "Checking FMS file ";FMSDIR$;
  1403.       NLINES = 0
  1404.       LOCATE 7,27
  1405.       PRINT "Line #";
  1406.       LOCATE 9,20
  1407.       COLOR 0,7
  1408.       PRINT " Last Line with an ERROR ";
  1409.       LOCATE 12,28
  1410.       PRINT " Last ERROR ";
  1411.       COLOR 7,0
  1412.       NCATS = 0
  1413.       CALL FINDFILE (FMS.DIRCAT$,FEXISTS)
  1414.       IF FEXISTS THEN _
  1415.          NCATS = 1:_
  1416.          CAT.CODE$(1) = "***":_
  1417.          OPEN FMS.DIRCAT$ FOR INPUT AS #2 : _
  1418.          WHILE NOT EOF(2) AND NCATS < UBOUND(CAT.CODE$) :_
  1419.            NCATS = NCATS + 1:_
  1420.            INPUT #2,X$,Y$,X$:_
  1421.            CAT.CODE$(NCATS)= Y$:_
  1422.          WEND:_
  1423.          CLOSE 2
  1424.       GO.ON = -1
  1425.       CALL FINDFILE (FMSDIR$,FEXISTS)
  1426.       IF NOT FEXISTS THEN _
  1427.          LOCATE 6,25 : _
  1428.          PRINT "File not found"; : _
  1429.          GOTO 61750
  1430.       OPEN FMSDIR$ FOR INPUT AS #2
  1431.       WHILE NOT EOF(2) AND GO.ON
  1432.          NLINES = NLINES + 1
  1433.          LINE INPUT #2, A$
  1434.          L = LEN(A$)
  1435.          LOCATE 7,36
  1436.          PRINT NLINES;
  1437.          IF L > LINELEN THEN _
  1438.         CALL HANDERR (A$,NLINES,"Too LONG: has"+STR$(L)+" chars but should have"+STR$(LINELEN),GO.ON):_
  1439.         IF NOT GO.ON THEN 61740
  1440.      IF L < LINELEN THEN _
  1441.         CALL HANDERR (A$,NLINES,"Too SHORT: has"+STR$(L)+" chars but should have"+STR$(LINELEN),GO.ON):_
  1442.         IF NOT GO.ON THEN 61740
  1443.      IF L > 30 THEN _
  1444.         X$ = MID$(A$,24,2)+MID$(A$,27,2)+MID$(A$,30,2) : _
  1445.         I = 1 : _
  1446.         WHILE I < 7 AND INSTR("0123456789",MID$(X$,I,1))>0 : _
  1447.            I = I+1: _
  1448.         WEND: _
  1449.         IF I < 7 THEN _
  1450.            CALL HANDERR (A$,NLINES,"INVALID CHARACTER <"+MID$(X$,I,1)+"> in date field",GO.ON) : _
  1451.            IF NOT GO.ON THEN 61740
  1452.      I = 1
  1453.      Y$ = MID$(A$,L-2)
  1454.      CALL REMOVE (Y$," ")
  1455.      WHILE I <= NCATS AND Y$ <> CAT.CODE$(I)
  1456.         I = I+1
  1457.      WEND
  1458.      IF I > NCATS THEN _
  1459.         CALL HANDERR (A$,NLINES,"Category code <"+Y$+"> NOT IN "+FMS.DIRCAT$,GO.ON)
  1460. 61740 WEND
  1461. 61750 CLOSE 2
  1462.       IF GO.ON THEN _
  1463.      LOCATE 15,15:_
  1464.          BEEP:_
  1465.      CALL ASKRO ("           Done checking.  Press [ENTER] to continue",20,ANS$)
  1466.       END SUB
  1467.       SUB HANDERR (ERRLINE$,ERRL,ERRMES$,GO.ON) STATIC
  1468.       LOCATE 10,1
  1469.       PRINT SPACE$(80);
  1470.       LOCATE 10,1
  1471.       PRINT ERRLINE$;
  1472.       LOCATE  9,45
  1473.       PRINT STR$(ERRL);
  1474.       LOCATE 13,1
  1475.       PRINT SPACE$(79);
  1476.       L = LEN(ERRMES$)
  1477.       IF L > 68 THEN _
  1478.      STRT = 1_
  1479.       ELSE _
  1480.      STRT = (70-L)/2
  1481.       LOCATE 13,STRT
  1482.       PRINT ERRMES$;
  1483.       CALL ASKRO ("               CONTINUE checking (Y/N,[ENTER]=Y) ",20,ANS$)
  1484.       IF ANS$ = "" THEN ANS$ = "Y"
  1485.       CALL ALLCAPS (ANS$)
  1486.       GO.ON = FNYESNO (ANS$)
  1487.       END SUB
  1488. ' $SUBTITLE: 'REMOVE - subroutine to delete a string from within a string'
  1489. ' $PAGE
  1490. '
  1491. '  SUBROUTINE NAME    -- REMOVE
  1492. '
  1493. '  INPUT PARAMETERS   -- PARAMETER                      MEANING
  1494. '                        BADSTRING$              STRING CONTAINING CHARACTERS
  1495. '                                                TO BE DELETED FROM "L$"
  1496. '                        L$                      STRING TO BE ALTERED
  1497. '
  1498. '  OUTPUT PARAMETERS  -- L$                      WITH THE CHARACTERS IN
  1499. '                                                "BADSTRING#" DELETED FROM IT
  1500. '
  1501. '  SUBROUTINE PURPOSE -- TO REMOVE ALL INSTANCES OF THE CHARACTERS IN
  1502. '                        "BADSTRING$" FROM "L$"
  1503. '
  1504.       SUB REMOVE (L$,BADSTRNG$) STATIC
  1505. 61800 J = 0
  1506.       FOR I=1 TO LEN(L$)
  1507.          IF INSTR(BADSTRNG$,MID$(L$,I,1)) = 0 THEN_
  1508.             J = J+1:_
  1509.             MID$(L$,J,1) = MID$(L$,I,1)
  1510.       NEXT I
  1511.       L$ = LEFT$(L$,J)
  1512.       END SUB
  1513.